﻿/*
 Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
 For licensing, see LICENSE.md or http://ckeditor.com/license
 */
CKEDITOR.dialog.add("select", function (c) {
    function h(a, b, e, d, c) {
        a = f(a);
        d = d ? d.createElement("OPTION") : document.createElement("OPTION");
        if (a && d && "option" == d.getName())CKEDITOR.env.ie ? (isNaN(parseInt(c, 10)) ? a.$.options.add(d.$) : a.$.options.add(d.$, c), d.$.innerHTML = 0 < b.length ? b : "", d.$.value = e) : (null !== c && c < a.getChildCount() ? a.getChild(0 > c ? 0 : c).insertBeforeMe(d) : a.append(d), d.setText(0 < b.length ? b : ""), d.setValue(e)); else return !1;
        return d
    }

    function m(a) {
        for (var a = f(a), b = g(a), e = a.getChildren().count() - 1; 0 <=
        e; e--)a.getChild(e).$.selected && a.getChild(e).remove();
        i(a, b)
    }

    function n(a, b, e, d) {
        a = f(a);
        if (0 > b)return !1;
        a = a.getChild(b);
        a.setText(e);
        a.setValue(d);
        return a
    }

    function k(a) {
        for (a = f(a); a.getChild(0) && a.getChild(0).remove(););
    }

    function j(a, b, e) {
        var a = f(a), d = g(a);
        if (0 > d)return !1;
        b = d + b;
        b = 0 > b ? 0 : b;
        b = b >= a.getChildCount() ? a.getChildCount() - 1 : b;
        if (d == b)return !1;
        var d = a.getChild(d), c = d.getText(), o = d.getValue();
        d.remove();
        d = h(a, c, o, !e ? null : e, b);
        i(a, b);
        return d
    }

    function g(a) {
        return (a = f(a)) ? a.$.selectedIndex : -1
    }

    function i(a, b) {
        a = f(a);
        if (0 > b)return null;
        var e = a.getChildren().count();
        a.$.selectedIndex = b >= e ? e - 1 : b;
        return a
    }

    function l(a) {
        return (a = f(a)) ? a.getChildren() : !1
    }

    function f(a) {
        return a && a.domId && a.getInputElement().$ ? a.getInputElement() : a && a.$ ? a : !1
    }

    return {
        title: c.lang.forms.select.title,
        minWidth: CKEDITOR.env.ie ? 460 : 395,
        minHeight: CKEDITOR.env.ie ? 320 : 300,
        onShow: function () {
            delete this.selectBox;
            this.setupContent("clear");
            var a = this.getParentEditor().getSelection().getSelectedElement();
            if (a && "select" == a.getName()) {
                this.selectBox =
                    a;
                this.setupContent(a.getName(), a);
                for (var a = l(a), b = 0; b < a.count(); b++)this.setupContent("option", a.getItem(b))
            }
        },
        onOk: function () {
            var a = this.getParentEditor(), b = this.selectBox, e = !b;
            e && (b = a.document.createElement("select"));
            this.commitContent(b);
            if (e && (a.insertElement(b), CKEDITOR.env.ie)) {
                var d = a.getSelection(), c = d.createBookmarks();
                setTimeout(function () {
                    d.selectBookmarks(c)
                }, 0)
            }
        },
        contents: [{
            id: "info",
            label: c.lang.forms.select.selectInfo,
            title: c.lang.forms.select.selectInfo,
            accessKey: "",
            elements: [{
                id: "txtName",
                type: "text",
                widths: ["25%", "75%"],
                labelLayout: "horizontal",
                label: c.lang.common.name,
                "default": "",
                accessKey: "N",
                style: "width:350px",
                setup: function (a, b) {
                    "clear" == a ? this.setValue(this["default"] || "") : "select" == a && this.setValue(b.data("cke-saved-name") || b.getAttribute("name") || "")
                },
                commit: function (a) {
                    this.getValue() ? a.data("cke-saved-name", this.getValue()) : (a.data("cke-saved-name", !1), a.removeAttribute("name"))
                }
            }, {
                id: "txtValue",
                type: "text",
                widths: ["25%", "75%"],
                labelLayout: "horizontal",
                label: c.lang.forms.select.value,
                style: "width:350px",
                "default": "",
                className: "cke_disabled",
                onLoad: function () {
                    this.getInputElement().setAttribute("readOnly", !0)
                },
                setup: function (a, b) {
                    "clear" == a ? this.setValue("") : "option" == a && b.getAttribute("selected") && this.setValue(b.$.value)
                }
            }, {
                type: "hbox", widths: ["175px", "170px"], children: [{
                    id: "txtSize",
                    type: "text",
                    labelLayout: "horizontal",
                    label: c.lang.forms.select.size,
                    "default": "",
                    accessKey: "S",
                    style: "width:175px",
                    validate: function () {
                        var a = CKEDITOR.dialog.validate.integer(c.lang.common.validateNumberFailed);
                        return "" === this.getValue() || a.apply(this)
                    },
                    setup: function (a, b) {
                        "select" == a && this.setValue(b.getAttribute("size") || "");
                        CKEDITOR.env.webkit && this.getInputElement().setStyle("width", "86px")
                    },
                    commit: function (a) {
                        this.getValue() ? a.setAttribute("size", this.getValue()) : a.removeAttribute("size")
                    }
                }, {type: "html", html: "<span>" + CKEDITOR.tools.htmlEncode(c.lang.forms.select.lines) + "</span>"}]
            }, {type: "html", html: "<span>" + CKEDITOR.tools.htmlEncode(c.lang.forms.select.opAvail) + "</span>"}, {
                type: "hbox", widths: ["115px",
                    "115px", "100px"], children: [{
                    type: "vbox",
                    children: [{
                        id: "txtOptName",
                        type: "text",
                        label: c.lang.forms.select.opText,
                        style: "width:115px",
                        setup: function (a) {
                            "clear" == a && this.setValue("")
                        }
                    }, {
                        type: "select",
                        id: "cmbName",
                        label: "",
                        title: "",
                        size: 5,
                        style: "width:115px;height:75px",
                        items: [],
                        onChange: function () {
                            var a = this.getDialog(), b = a.getContentElement("info", "cmbValue"), e = a.getContentElement("info", "txtOptName"), a = a.getContentElement("info", "txtOptValue"), d = g(this);
                            i(b, d);
                            e.setValue(this.getValue());
                            a.setValue(b.getValue())
                        },
                        setup: function (a, b) {
                            "clear" == a ? k(this) : "option" == a && h(this, b.getText(), b.getText(), this.getDialog().getParentEditor().document)
                        },
                        commit: function (a) {
                            var b = this.getDialog(), e = l(this), d = l(b.getContentElement("info", "cmbValue")), c = b.getContentElement("info", "txtValue").getValue();
                            k(a);
                            for (var f = 0; f < e.count(); f++) {
                                var g = h(a, e.getItem(f).getValue(), d.getItem(f).getValue(), b.getParentEditor().document);
                                d.getItem(f).getValue() == c && (g.setAttribute("selected", "selected"), g.selected = !0)
                            }
                        }
                    }]
                }, {
                    type: "vbox", children: [{
                        id: "txtOptValue",
                        type: "text", label: c.lang.forms.select.opValue, style: "width:115px", setup: function (a) {
                            "clear" == a && this.setValue("")
                        }
                    }, {
                        type: "select",
                        id: "cmbValue",
                        label: "",
                        size: 5,
                        style: "width:115px;height:75px",
                        items: [],
                        onChange: function () {
                            var a = this.getDialog(), b = a.getContentElement("info", "cmbName"), e = a.getContentElement("info", "txtOptName"), a = a.getContentElement("info", "txtOptValue"), d = g(this);
                            i(b, d);
                            e.setValue(b.getValue());
                            a.setValue(this.getValue())
                        },
                        setup: function (a, b) {
                            if ("clear" == a)k(this); else if ("option" ==
                                a) {
                                var e = b.getValue();
                                h(this, e, e, this.getDialog().getParentEditor().document);
                                "selected" == b.getAttribute("selected") && this.getDialog().getContentElement("info", "txtValue").setValue(e)
                            }
                        }
                    }]
                }, {
                    type: "vbox", padding: 5, children: [{
                        type: "button",
                        id: "btnAdd",
                        style: "",
                        label: c.lang.forms.select.btnAdd,
                        title: c.lang.forms.select.btnAdd,
                        style: "width:100%;",
                        onClick: function () {
                            var a = this.getDialog();
                            a.getParentEditor();
                            var b = a.getContentElement("info", "txtOptName"), e = a.getContentElement("info", "txtOptValue"), d = a.getContentElement("info",
                                "cmbName"), c = a.getContentElement("info", "cmbValue");
                            h(d, b.getValue(), b.getValue(), a.getParentEditor().document);
                            h(c, e.getValue(), e.getValue(), a.getParentEditor().document);
                            b.setValue("");
                            e.setValue("")
                        }
                    }, {
                        type: "button",
                        id: "btnModify",
                        label: c.lang.forms.select.btnModify,
                        title: c.lang.forms.select.btnModify,
                        style: "width:100%;",
                        onClick: function () {
                            var a = this.getDialog(), b = a.getContentElement("info", "txtOptName"), e = a.getContentElement("info", "txtOptValue"), d = a.getContentElement("info", "cmbName"), a = a.getContentElement("info",
                                "cmbValue"), c = g(d);
                            0 <= c && (n(d, c, b.getValue(), b.getValue()), n(a, c, e.getValue(), e.getValue()))
                        }
                    }, {
                        type: "button",
                        id: "btnUp",
                        style: "width:100%;",
                        label: c.lang.forms.select.btnUp,
                        title: c.lang.forms.select.btnUp,
                        onClick: function () {
                            var a = this.getDialog(), b = a.getContentElement("info", "cmbName"), c = a.getContentElement("info", "cmbValue");
                            j(b, -1, a.getParentEditor().document);
                            j(c, -1, a.getParentEditor().document)
                        }
                    }, {
                        type: "button",
                        id: "btnDown",
                        style: "width:100%;",
                        label: c.lang.forms.select.btnDown,
                        title: c.lang.forms.select.btnDown,
                        onClick: function () {
                            var a = this.getDialog(), b = a.getContentElement("info", "cmbName"), c = a.getContentElement("info", "cmbValue");
                            j(b, 1, a.getParentEditor().document);
                            j(c, 1, a.getParentEditor().document)
                        }
                    }]
                }]
            }, {
                type: "hbox",
                widths: ["40%", "20%", "40%"],
                children: [{
                    type: "button",
                    id: "btnSetValue",
                    label: c.lang.forms.select.btnSetValue,
                    title: c.lang.forms.select.btnSetValue,
                    onClick: function () {
                        var a = this.getDialog(), b = a.getContentElement("info", "cmbValue");
                        a.getContentElement("info", "txtValue").setValue(b.getValue())
                    }
                },
                    {
                        type: "button",
                        id: "btnDelete",
                        label: c.lang.forms.select.btnDelete,
                        title: c.lang.forms.select.btnDelete,
                        onClick: function () {
                            var a = this.getDialog(), b = a.getContentElement("info", "cmbName"), c = a.getContentElement("info", "cmbValue"), d = a.getContentElement("info", "txtOptName"), a = a.getContentElement("info", "txtOptValue");
                            m(b);
                            m(c);
                            d.setValue("");
                            a.setValue("")
                        }
                    }, {
                        id: "chkMulti",
                        type: "checkbox",
                        label: c.lang.forms.select.chkMulti,
                        "default": "",
                        accessKey: "M",
                        value: "checked",
                        setup: function (a, b) {
                            "select" == a && this.setValue(b.getAttribute("multiple"));
                            CKEDITOR.env.webkit && this.getElement().getParent().setStyle("vertical-align", "middle")
                        },
                        commit: function (a) {
                            this.getValue() ? a.setAttribute("multiple", this.getValue()) : a.removeAttribute("multiple")
                        }
                    }]
            }]
        }]
    }
});